#ifndef EVENT_H
#define EVENT_H

// std c++ lib
#include <cstring>

// include window header
#include "../Window/window.h"

// include Timer header
#include "../TimeSystem/Timer/Timer.h"


#define MOUSE_EVENT_BORDER 1024



class event
{
public:
    // инициализация
    static void initialization();

    // Отслеживание событий
    static void pollEvents();

    // очистка ресурсов
    static void finallyzation();

    // постоянное нажатие на кнопку
    static bool isKeyPressed(int keycode);

    // одиночное нажатие на кнопку
    static bool jKeyPressed(int keycode);

    // постоянное нажатие на кнопку мыши
    static bool isMousePressed(int keycode);

    // одиночное нажатие на мышь
    static bool jMousePressed(int keycode);

    // методы для получения позиции и смещения курсора
    static const glm::dvec2& getMousePos();          // позиция
    static const glm::dvec2& getDeltaMouseMove();    // смещение

private:
    static bool* keys;                      // состояние клавиш и не только клавиш ( но и мыши и джойстика в дальнейшем )
    static unsigned int* frames;            // массив где будут храниться ( ну или отпечатываться ) текущий кадр при нажатий на кнопку
    static unsigned int _currentFrame;      // текущий кадр
    static glm::dvec2 mouse_pos;            // позиция мыши
    static glm::dvec2 delta_mouse_move;     // изменение позиции мыши относительно последней позиции


    // callback (key pressed)
    static void key_callback(GLFWwindow* win, int key, int scancode, int action, int mods);

    // callback (mouse button)
    static void mouse_callback(GLFWwindow* window, int button, int action, int mods);
};

#endif // EVENT_H
